import axios from 'axios';
import router from '@/router';
import { MessageBox, Message, Loading } from 'element-ui';
import store from '@/store';
import DonMessage from '@/utils/message';
import { setToken, getToken } from '@/utils/auth';
import { showLoading, closeLoading } from '@/utils/loading';

const base_url = process.env.VUE_APP_BASE_URL;
// console.log('base_url', base_url)
// 创建axios实例
const service = axios.create({
  baseURL: base_url,
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 100 * 1000, // request timeout 60秒
});
// request interceptor
service.interceptors.request.use(
  (config) => {
    const userInfo = JSON.parse(window.localStorage.getItem('userInfo'))
    if (userInfo?.username) {
      config.headers['username'] = userInfo.username
    }
    // console.log('userInfo',userInfo, userInfo.username);
    // 设置token
    // const token = getToken();
    // console.log('token', token)
    // if (token) {
    //   if (!config.headers) {
    //     config.headers = {};
    //   }
    //   config.headers.Authorization = `Bearer ${token}`;
    //   config.headers.token = token;
    //   config.headers['X-Access-Token'] = token;
    // }
    // // 请求传参格式
    // if (config.method === 'post') {
    //   if (!config.headers) {
    //     config.headers['Content-Type'] =
    //       'application/x-www-form-urlencoded;charset=utf-8'
    //   }
    // } else {
    //   config.headers['Content-Type'] =
    //     'application/x-www-form-urlencoded;charset=utf-8'
    // }
    // config.headers['Cache-Control'] = 'no-cache'
    // config.headers['Pragma'] = 'no-cache'

    // // 防止IE浏览器get请求缓存
    // if (config.method === 'get' && config.params) {
    //   config.params._t = Date.now()
    // } else if (config.method === 'get' && !config.params) {
    //   if (config.url.indexOf('?') === -1) {
    //     config.url = config.url + '?_=' + (new Date().getTime())
    //   } else {
    //     config.url = config.url + '&_=' + (new Date().getTime())
    //   }
    // }
    if (config.url.indexOf('buvDisFiPosController.do?bu00Bu01Waring') != -1) {
      closeLoading();
    } else if (!config.noloading) {
      showLoading();
    }
    return config;
  },
  (error) => {
    // do something with request error
    console.log(error); // for debug
    return Promise.reject(error);
  }
);

// response interceptor
service.interceptors.response.use(
  (response) => {
    const { responseType } = response.config;
    if (response.config) {
      closeLoading();
    }

    // 200 成功
    if (response.data.msgcode === 200 || response.data.code === 200) {
      if (responseType === 'blob' || responseType === 'arraybuffer') {
        // 流文件

        return response;
      } else {
        // 普通数据
        return response.data;
      }
    } else {
      let errorMessage = '发生了错误，请检查接口';
      if (response.data.status) {
        errorMessage = response.data.status;
      }
      if (response.data.message) {
        errorMessage = response.data.message;
      }
      DonMessage.error({
        message: errorMessage,
        type: 'error',
        duration: 5 * 1000,
      });
      return Promise.reject(new Error(errorMessage || 'Error'));
    }
  },
  (error) => {
    // 请求发生错误
    const status = error.response ? error.response.status : '';
    const data = error.response ? error.response.data : '';

    /**
     * status
     * 401 未登录
     * 403 token过期
     * 404 网络请求不存在，可能是请求中没有版本号信息version
     */

    if (status === 401) {
      // 跳转登录
      store.dispatch('user/reLogin');
    }
    if (status === 403) {
      DonMessage.error({
        message: '登录信息已过期，请重新登录',
        type: 'error',
        duration: 5 * 1000,
      });
      // 跳转登录
      store.dispatch('user/reLogin');
    }
    if (status === 404) {
      DonMessage.error({
        message: '网络请求不存在',
        type: 'error',
        duration: 5 * 1000,
      });
    }

    /**
     * msgCode
     * 200 操作成功
     * 500 操作失败
     * 202 操作进行中
     * 402 参数校验失败
     * 429 后端服务器出发流控
     * 604 后端服务器出发降级
     * 403 没有相关权限
     * 502 网管服务器异常
     * 401 暂未登陆或者token已过期
     * 600 请求头中没有token信息
     * 601 远程获取TokenKey异常
     * 602 生成公钥异常
     * 603 token校验异常
     * 604 未登录
     * 605 账号在别处登录
     */
    const errList = [401, 600, 603, 604, 605];
    if (errList.includes(data.msgcode)) {
      // 错误信息
      DonMessage.error({
        message: data.status + data.message,
        type: 'error',
        duration: 5 * 1000,
      });
      // 跳转登录
      store.dispatch('user/reLogin');
    }
    // // 通过刷新token拿去token，续期
    // const refreshList = [603]
    // if (refreshList.includes(data.msgcode)) {
    //   store.dispatch("user/getTokenByRefreshToken")
    // }
    else {
      DonMessage.error({
        message: error.message,
        type: 'error',
        duration: 5 * 1000,
      });
    }
    closeLoading();
    return Promise.reject(error);
  }
);

export default service;
